#include <stdio.h>


struct C {
	int p;
	int q;
	void* f;
	int x[(4)];
	void* f_array[(4)];
};

struct C* _C_constructor_int_int_int_(int p, int q, int r)  {
struct C* this = (struct C*) malloc(sizeof(struct C));
this->p = (p);
this->q = (q);
this->x[(0)] = (r) + (0);
this->x[(1)] = (r) + (1);
this->x[(2)] = (r) + (2);
this->x[(3)] = (r) + (3);
return this;
}


int func1(int a, int b)  {
return (a) * (b);
}

int func2_add(int a, int b)  {
return (a) + (b);
}

int func2_minu(int a, int b)  {
return (a) - (b);
}

int func2_mult(int a, int b)  {
return (a) * (b);
}

int func2_div(int a, int b)  {
return (a) / (b);
}


int main() {
int x = (5);
int y = (6);
int z = (func1((x), (y)));
int i = (0);
void* fu = (func1);
printf("%d %d\n", (((int(*) (int, int)) fu)((x), (y))), (z));
x++;
y++;
struct C* c1 = (_C_constructor_int_int_int_((x), (y), (z)));
c1->f = (func1);
c1->f_array[(0)] = (func2_add);
c1->f_array[(1)] = (func2_minu);
c1->f_array[(2)] = (func2_mult);
c1->f_array[(3)] = (func2_div);
for (i = (0);(i) < (4);i++) {
printf("Yeah ! the result is %d %d\n", (c1->x[(i)]), (((int(*) (int, int)) c1->f_array[(i)])((x), (y))));
}
printf("%d\n", (((int(*) (int, int)) c1->f)((c1->p), (c1->q))));
}